package com.shiyu.exam.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shiyu.exam.common.Result;
import com.shiyu.exam.entity.Notice;
import com.shiyu.exam.mapper.NoticeMapper;
import com.shiyu.exam.service.NoticeService;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * 公告服务实现类
 */
@Service
public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements NoticeService {

    @Override
    public Result<List<Notice>> getActiveNotices() {
        // 创建一个 MyBatis-Plus 查询条件器
        LambdaQueryWrapper<Notice> noticeLambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 只获取启用的
        noticeLambdaQueryWrapper.eq(Notice::getIsActive, true);
        // 返回列表
        return Result.success(baseMapper.selectList(noticeLambdaQueryWrapper));
    }

    @Override
    public Result<List<Notice>> getLatestNotices(int limit) {
        // 创建一个 MyBatis-Plus 查询条件器
        LambdaQueryWrapper<Notice> noticeLambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 只获取启用的
        noticeLambdaQueryWrapper.eq(Notice::getIsActive, true);
        // 获取最新limit条数据
        noticeLambdaQueryWrapper.last("LIMIT " + limit);
        // 获取结果
        return Result.success(baseMapper.selectList(noticeLambdaQueryWrapper));
    }

    @Override
    public Result<List<Notice>> getAllNotices() {
        // 返回所有公告
        LambdaQueryWrapper<Notice> noticeLambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 排序
        noticeLambdaQueryWrapper.orderByDesc(Notice::getPriority, Notice::getCreateTime);
        // 返回结果
        return Result.success(this.list(noticeLambdaQueryWrapper));
    }

    @Override
    public Result<String> addNotice(Notice notice) {
        return Result.success(this.save(notice) ? "公告添加成功" : "公告添加失败");
    }

    @Override
    public Result<String> updateNotice(Notice notice) {
        //更新公告并且更新数据库中的更新时间
        notice.setUpdateTime(new Date()); // 设置更新时间
        boolean updated = this.updateById(notice);
        return Result.success(updated ? "公告更新成功" : "公告更新失败");
    }

    @Override
    public Result<String> deleteNotice(Long id) {
        return Result.success(this.removeById(id) ? "公告删除成功" : "公告删除失败");
    }

    @Override
    public Result<String> toggleNoticeStatus(Long id, Boolean isActive) {
        // 创建一个 MyBatis-Plus 更新条件器
        LambdaUpdateWrapper<Notice> noticeLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        // 设置要更新的字段
        noticeLambdaUpdateWrapper.eq(Notice::getId, id);
        // 设置要更新的值
        noticeLambdaUpdateWrapper.set(Notice::getIsActive, isActive);
        // 执行更新
        return Result.success(this.update(noticeLambdaUpdateWrapper) ? "公告状态更新成功" : "公告状态更新失败");
    }
} 